home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / io / ObjectOutputStream$HandleTable.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  1.4 KB  |  93 lines

  1. package java.io;
  2.  
  3. import java.util.Arrays;
  4.  
  5. class ObjectOutputStream$HandleTable {
  6.    private int size;
  7.    private int threshold;
  8.    private final float loadFactor;
  9.    private int[] spine;
  10.    private int[] next;
  11.    private Object[] objs;
  12.  
  13.    ObjectOutputStream$HandleTable(int var1, float var2) {
  14.       this.loadFactor = var2;
  15.       this.spine = new int[var1];
  16.       this.next = new int[var1];
  17.       this.objs = new Object[var1];
  18.       this.threshold = (int)((float)var1 * var2);
  19.       this.clear();
  20.    }
  21.  
  22.    int assign(Object var1) {
  23.       if (this.size >= this.next.length) {
  24.          this.growEntries();
  25.       }
  26.  
  27.       if (this.size >= this.threshold) {
  28.          this.growSpine();
  29.       }
  30.  
  31.       this.insert(var1, this.size);
  32.       return this.size++;
  33.    }
  34.  
  35.    int lookup(Object var1) {
  36.       if (this.size == 0) {
  37.          return -1;
  38.       } else {
  39.          int var2 = this.hash(var1) % this.spine.length;
  40.  
  41.          for(int var3 = this.spine[var2]; var3 >= 0; var3 = this.next[var3]) {
  42.             if (this.objs[var3] == var1) {
  43.                return var3;
  44.             }
  45.          }
  46.  
  47.          return -1;
  48.       }
  49.    }
  50.  
  51.    void clear() {
  52.       Arrays.fill(this.spine, -1);
  53.       Arrays.fill(this.objs, 0, this.size, (Object)null);
  54.       this.size = 0;
  55.    }
  56.  
  57.    int size() {
  58.       return this.size;
  59.    }
  60.  
  61.    private void insert(Object var1, int var2) {
  62.       int var3 = this.hash(var1) % this.spine.length;
  63.       this.objs[var2] = var1;
  64.       this.next[var2] = this.spine[var3];
  65.       this.spine[var3] = var2;
  66.    }
  67.  
  68.    private void growSpine() {
  69.       this.spine = new int[(this.spine.length << 1) + 1];
  70.       this.threshold = (int)((float)this.spine.length * this.loadFactor);
  71.       Arrays.fill(this.spine, -1);
  72.  
  73.       for(int var1 = 0; var1 < this.size; ++var1) {
  74.          this.insert(this.objs[var1], var1);
  75.       }
  76.  
  77.    }
  78.  
  79.    private void growEntries() {
  80.       int var1 = (this.next.length << 1) + 1;
  81.       int[] var2 = new int[var1];
  82.       System.arraycopy(this.next, 0, var2, 0, this.size);
  83.       this.next = var2;
  84.       Object[] var3 = new Object[var1];
  85.       System.arraycopy(this.objs, 0, var3, 0, this.size);
  86.       this.objs = var3;
  87.    }
  88.  
  89.    private int hash(Object var1) {
  90.       return System.identityHashCode(var1) & Integer.MAX_VALUE;
  91.    }
  92. }
  93.